// JavaScript Document

var ajax = {};	//패키지 선언
ajax.xhr = {}; 	//패치지 중첩선언

ajax.xhr.Request = function(url, params, callback, method){
	this.url = url;
	this.params = params;
	this.callback = callback;
	this.method = method;
	this.send();	//생성자 실행시 send()메세지호출
}

ajax.xhr.Request.prototype = {
		getXMLHttpRequest : function(){
			if(window.ActiveXObject){ //IE
				try {
					alert("브라우저 확인");
					return new ActiveXObject("Msxml2.XMLHTTP"); //IE 6.0 이상
				} catch (e) {
					try {
						return new ActiveXObject("Microsoft.XMLHTTP"); //IE 6.0이하
					} catch (e1) {
						return null;
					}
				}
			}else if(window.XMLHttpRequest){ // 기타 브라우저
				return new XMLHttpRequest();			
			}else{
				return null;
			}
		},
	
		send:function(){
			this.req =  this.getXMLHttpRequest();
			
			var httpMethod = this.method ? this.method : 'GET';				 			//전송방식이 post가 아닐경우 get으로.
			if(httpMethod != 'GET' && httpMethod != 'POST') httpMethod = 'GET';  
			
			var httpParams = (this.params == null || this.params == '') ? null : this.params;	//파라미터를 null또는 입력한 값으로
			var httpUrl = this.url;
			
			if(httpMethod == 'GET' && httpParams != null) httpUrl = httpUrl + "?" +  httpParams;	//get전송 방식일경우 파라미터를 url에 넣어준다.
			
			this.req.open(httpMethod, httpUrl, true);
			this.req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			
			var request = this;
			
			/*
			 * this는 ajax.xhr.Request클래스의 객체 자기자신을 의미
			 * XMLHttpRequest 객체의 readyState 값이 변경될때 request객체의 onStateChange 함수 호출
			 */
			 
			this.req.onreadystatechange = function(){
				request.onStateChange.call(request);
			}
			
			this.req.send(httpMethod == 'POST' ? httpParams : null) //post이면 파라미터값을 넘기고 아니면 null
			alert(httpParams);
		},
		
		onStateChange :function(){
			this.callback(this.req);
		}
}







